package thread;

/**
 * 第一种创建线程的方式:
 * 继承Thread并重写run方法
 */
public class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t1 = new MyThread1();
        Thread t2 = new MyThread2();

        t1.start();
        t2.start();

         /*
            启动线程是调用线程的start方法，而不是直接调用run方法。
            当线程调用start方法后就纳入到了线程调度器中，一旦调度器分配时间片
            给当前线程，它的run方法会自动被调用。
         */

    }

}
/**
 * 第一种创建线程的方式的优缺点:
 * 优点:
 * 结构简单，便于使用匿名内部类方式创建
 *
 * 缺点:
 * 1:java是单继承的，这意味着如果继承了Thread则无法再继承其他类
 *   通常实际开发中我们继承一个类的目的是为了复用方法，如果继承了Thread则无法再
 *   继承其他类来复用方法。
 * 2:当我们定义线程则重写run方法将线程的任务定义在其中，这导致了线程和任务存在了
 *   必然的耦合关系，不利于线程的重用。
 */
class MyThread1 extends Thread{
    public void run(){
        for (int i=0;i<100;i++){
            System.out.println("熊大，快看光头强正在吃什么东西");
        }
    }
}

class MyThread2 extends Thread{
    public void run(){
        for (int i=0;i<100;i++){
            System.out.println("光头强,你给我留点");
        }
    }
}
